package algorithme;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Scanner;
import java.util.StringTokenizer;

import data.Ville;
import data.VilleHelper;

/**
 * Classe GraphePoids : modélisation d'un graphe orienté
 * 
 * @author Alexandre Boursier and Mamadou Diallo and Cyril Gorrieri and Emmanuel
 *         Menage
 * @version 2012.01.23
 */
public class GraphePoids {
	/**
	 * Matrice regroupant la distance entre deux villes quelconques (0 sur les
	 * diagonales, ou si pas de connexion entre i et j)
	 */
	private static int[][] distVilles = new int[Ville.values().length][Ville
			.values().length];

	static {
		init();
	}

	public static void init() {
		for (int i = 0; i < Ville.values().length; i++) {
			for (int j = 0; j < Ville.values().length; j++) {
				distVilles[i][j] = -1;
			}
		}

		File f = new File("distance.txt");
		if (!f.exists()) {
			try {
				f.createNewFile();
			} catch (IOException e) {
				return;
			}
		}

		// Definir un scanner sur le fichier
		Scanner scan = null;
		try {
			scan = new Scanner(f);
		} catch (FileNotFoundException e) {
			return;
		}

		String buffer = null;
		String[] token = new String[3];
		Ville v1, v2;
		int distance;

		// Parcourir l'ensemble du fichier
		while (scan.hasNextLine()) {

			// Lire la ligne courante du fichier
			buffer = scan.nextLine();
			// Decouper la ligne lue
			StringTokenizer st = new StringTokenizer(buffer, " ");

			for (int i = 0; i < token.length; i++)
				token[i] = st.nextToken();
			v1 = VilleHelper.getVille(token[0]);
			v2 = VilleHelper.getVille(token[1]);
			try {
				distance = Integer.parseInt(token[2]);
			} catch (Exception e) {
				distance = -1;
			}
			if (v1 != v2 && v1 != Ville.UNKNOWN && v2 != Ville.UNKNOWN
					&& distance > 0) {
				distVilles[v1.getRang()][v2.getRang()] = distance;
				distVilles[v2.getRang()][v1.getRang()] = distance;
			}
		}
	}

	/**
	 * @return la distance entre deux villes i et j
	 */
	public static int getDistVilles(int i, int j) {
		return distVilles[i][j];
	}
}
